package com.jhxy.algorithm.merge;

import com.jhxy.algorithm.util.InputsForMerge;
import com.jhxy.algorithm.util.PrintTool;

import java.util.List;

/**
 * 逆序归并
 */
public class ReverseOrder {


    public static void main(String[] args) {
        InputsForMerge inputs = new InputsForMerge("1,2,3,0,0,0;0;1", "3;0;1", "2,5,6;1;0", "3;1;0");
        PrintTool print = new PrintTool();
        ReverseOrder ins = new ReverseOrder();
        int i = 1;
        for (List<Object> input : inputs.inputs) {
            System.out.println("=================第" + (i++) + "组输入输出=================");
            print.printArray((int[]) input.get(0));
            System.out.println("");
            System.out.println("m:" + (int) input.get(1));
            print.printArray((int[]) input.get(2));
            System.out.println("");
            System.out.println("n:" + (int) input.get(3));
            int[] nums1 = (int[]) input.get(0);
            ins.merge(nums1, (int) input.get(1), (int[]) input.get(2), (int) input.get(3));
            print.printArray(nums1);
            System.out.println("");
        }
    }

    private void merge(int[] nums1, int m, int[] nums2, int n) {
        //nums1数组中的最大值的角标
        int i = m - 1;
        //nums2数组中的最大值的角标
        int j = n - 1;
        //实际合并后的末尾脚表
        int tail = nums1.length - 1;

        while (i >= 0 && j >= 0) {
            if (nums1[i] >= nums2[j]) {
                nums1[tail] = nums1[i];
                i--;
                tail--;
            } else {
                nums1[tail] = nums2[j];
                j--;
                tail--;
            }
        }

        //看下nums1和nums2中哪个数组还有数据没有移动完
        if (i < 0) {
            while (j >= 0) {
                nums1[tail] = nums2[j];
                j--;
                tail--;
            }
        } else if (j < 0) {
            while (i > 0) {
                nums1[tail] = nums1[i];
                i--;
                tail--;
            }
        }

    }
}
